<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title> PostgreSQL 简史</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="intro-whatis.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="preface.html">快退</a></td><td width="60%" align="center" valign="bottom">前言</td><td width="10%" align="right" valign="top"><a href="preface.html">快进</a></td><td width="10%" align="right" valign="top"><a href="notation.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="HISTORY">PostgreSQL 简史</a></h1><a name="AEN97"></a>
<p>现在被称为 PostgreSQL 的对象-关系型数据库管理系统是从伯克利编写的 POSTGRES 软件包发展而来的。经过十几年的发展，PostgreSQL 是目前世界上可以获得的最先进的开放源码数据库系统。</p>
<div class="SECT2"><h2 class="SECT2"><a name="HISTORY-BERKELEY">Berkeley 的 POSTGRES 项目</a></h2><a name="AEN107"></a>
<p>Michael Stonebraker 领导的 POSTGRES 项目是由防务高级研究项目局(DARPA)、陆军研究办公室(ARO)、国家科学基金(NSF)、ESL公司共同赞助的。POSTGRES 的实现始于 1986 年，该系统最初的概念详见 <a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#STON86"><i><a href="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M85-95.pdf" target="_top">The design of POSTGRES</a></I></A> 。最早的数据模型定义见 <a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#ROWE87"><i><a href="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M87-13.pdf" target="_top">The POSTGRES data model</a></I></A> 。当时的规则系统设计在 <a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#STON87A"><i>The design of the POSTGRES rules system</i></a> 里描述。存储管理器的理论基础和体系结构在 <a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#STON87B"><i><a href="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M87-06.pdf" target="_top">The design of the POSTGRES storage system</a></I></A> 里有详细描述。</p>
<p>从那以后，POSTGRES 经历了几次主要的版本更新。第一个"演示性"系统在 1987 年便可使用了，并且在 1988 年的 ACM-SIGMOD 大会上展出。在 1989 年 6 月发布了版本 1(在 <a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#STON90A"><i><a href="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M90-34.pdf" target="_top">The implementation of POSTGRES</a></I></A> 里有描述)给一些外部的用户使用。为了回应用户对第一个规则系统的批评(<a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#STON89"><i><a href="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M89-82.pdf" target="_top">A commentary on the POSTGRES rules system</a></I></A>)，我们重新设计了规则系统(<a href="http://www.jinbuguo.com/postgresql/manual/biblio.html#STON90B"><i><a href="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M90-36.pdf" target="_top">On Rules, Procedures, Caching and Views in Database Systems</a></I></A>)并在 1990 年 6 月发布了使用新规则系统的版本 2 。版本 3 在 1991 年出现，增加了多存储管理器的支持，并且改进了查询执行器，重新编写了规则系统。从那以后，随后的版本直到 Postgres95 发布前(见下文)，工作都集中在移植性和可靠性上。</p>
<p>POSTGRES 已经在许多研究或实际的应用中得到了应用。这些应用包括：一个财务数据分析系统、一个喷气引擎性能监控软件包、一个小行星跟踪数据库、一个医疗信息数据库和一些地理信息系统。POSTGRES 还被许多大学用于教学用途。最后，Illustra Information Technologies(后来并入 <a href="http://www.informix.com/" target="_top">Informix</a> ，而它现在属于 <a href="http://www.ibm.com/" target="_top">IBM</a>)拿到代码并使之商业化。在 1992 年末 POSTGRES 成为 <a href="http://meteora.ucsd.edu/s2k/s2k_home.html" target="_top">Sequoia 2000 scientific computing project</a> 的首要数据管理器。</p>
<p>到了 1993 年，外部用户的数量几乎翻番。随着用户的增加，用于源代码维护的时间日益增加，以至占用了太多本应该用于数据库研究的时间，为了减少支持的负担，伯克利的 POSTGRES 项目在版本 4.2 时正式终止。</p>
</div>
<div class="SECT2"><h2 class="SECT2"><a name="HISTORY-POSTGRES95">Postgres95</a></h2><a name="AEN140"></a>
<p>1994 年，Andrew Yu 和 Jolly Chen 向 POSTGRES 中增加了 SQL 语言的解释器，并随后将 Postgres95 的源代码发布到互联网上供大家使用，从而成为一个开放源码的原伯克利 POSTGRES 的继承者。</p>
<p>Postgres95 所有源代码都是完全的 ANSI C ，而且代码量减少了 25% 。并且有许多内部修改以利于提高性能和代码的可维护性。Postgres95 版本 1.0.x 在进行 Wisconsin Benchmark 测试时大概比 POSTGRES v4.2 快 30%-50% 。除了修正了一些错误，下面的是一些主要改进：</p>
<ul>
<li><p>原来的查询语言 PostQUEL 被 SQL 取代(在服务器端实现)。在 PostgreSQL 之前还不支持子查询(见下文)，但这个功能可以在 Postgres95 里面由用户定义的 SQL 函数实现。重新实现了聚集。同时还增加了对 <tt class="LITERAL">GROUP BY</tt> 查询子句的支持。</p></li>
<li><p>新增加了利用 GNU <span class="APPLICATION">Readline</span> 进行交互 SQL 查询(<span class="APPLICATION">psql</span>)。这个程序很大程度上取代了老的 <span class="APPLICATION">monitor</span> 程序。</p></li>
<li><p>增加了新的前端库(<tt class="FILENAME">libpgtcl</tt>)，用以支持以 Tcl 为基础的客户端。一个样本 shell(<tt class="COMMAND">pgtclsh</tt>)，提供了新的 Tcl 命令用于 <span class="APPLICATION">Tcl</span> 程序和 Postgres95 后端之间的交互。</p></li>
<li><p>彻底重写了大对象的接口。保留了将大对象倒转(inversion)作为存储大对象的唯一机制。去掉了倒转(inversion)文件系统。</p></li>
<li><p>去掉了记录级的规则系统。但我们仍然可以通过重写规则使用规则。</p></li>
<li><p>在发布的源码中增加了一个简短的常用 SQL 和 Postgres95 特有的 SQL 特性的教程。</p></li>
<li><p>用 GNU make 取代了 BSD make 用于编译。Postgres95 可以使用不加补丁的 GCC 进行编译(修正了偶数字节数据的对齐问题)。</p></li>
</ul>
</div>
<div class="SECT2"><h2 class="SECT2"><a name="AEN185">PostgreSQL</a></h2>
<p>到了 1996 年，我们很明显的看出"Postgres95"这个名字已经经不起时间的考验了。于是我们起了一个新名字 PostgreSQL 用于反映最初的 POSTGRES 和最新的使用 SQL 的版本之间的关系。同时版本号也重新从 6.0 开始，将版本号放回到最初的由伯克利 POSTGRES 项目开始的顺序中。</p>
<p>Postgres95 版本的开发重点放在标明和理解现有的后端代码的问题上。PostgreSQL 开发重点转到了一些有争议的特性和功能上面，当然各个方面的工作同时都在进行。</p>
<p>自那以来，PostgreSQL 发生的变化可以在<a href="http://www.postgresql.org/docs/current/static/release.html">发行注记</a>里面找到。</p>
</div>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="intro-whatis.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="notation.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">何为 PostgreSQL?</td><td width="34%" align="center" valign="top"><a href="preface.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">格式约定</td></tr>
</table>
</div>
</body></html>